import { ScoringPeriodService } from '../service/ScoringPeriodService'

/**
 * 日期工具类
 * 提供日期格式化和计算相关功能
 */
export class DateUtil {
    /**
     * 格式化当前日期为YYYY-MM-DD格式
     * @returns 格式化后的日期字符串
     */
    static formatCurrentDate(): string {
      return new Date().toISOString().split('T')[0];
    }

    /**
     * 格式化传入的日期为YYYY-MM-DD格式
     * @param date 要格式化的日期
     */
    static formatDate(date: Date): string {
      return date.toISOString().split('T')[0];
    }
    
    /**
     * 检查日期是否在指定范围内
     * @param date 要检查的日期
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @returns 是否在范围内
     */
    static isDateInRange(date: string, startDate: string, endDate: string): boolean {
      return date >= startDate && date <= endDate;
    }
    
    /**
     * 获取当前周期的日期范围
     * @returns 包含开始日期和结束日期的对象
     */
    static getCurrentPeriodRange(): { startDate: string; endDate: string } {
      const period = ScoringPeriodService.getCurrentPeriod();
      return {
        startDate: period.startDate,
        endDate: period.endDate
      };
    }
    
    /**
     * 计算两个日期之间的天数差
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @returns 天数差
     */
    static getDaysBetween(startDate: string, endDate: string): number {
      const start = new Date(startDate);
      const end = new Date(endDate);
      const timeDiff = end.getTime() - start.getTime();
      return Math.ceil(timeDiff / (1000 * 60 * 60 * 24));
    }
    
    /**
     * 获取指定日期的月份（YYYY-MM格式）
     * @param date 日期字符串
     * @returns 月份字符串
     */
    static getMonthFromDate(date: string): string {
      return date.substring(0, 7);
    }
    
    /**
     * 检查日期字符串是否有效
     * @param date 日期字符串
     * @returns 是否有效
     */
    static isValidDate(date: string): boolean {
      const regex = /^\d{4}-\d{2}-\d{2}$/;
      if (!regex.test(date)) return false;
      
      const d = new Date(date);
      return d instanceof Date && !isNaN(d.getTime());
    }
  }